package com.tunnel.client.processor;

import com.tunnel.client.net.LocalForward;

import com.tunnel.common.config.ClientParsConfig;
import com.tunnel.common.config.client.ClientConfig;
import com.tunnel.common.config.client.ProxyClientConfig;
import com.tunnel.common.protocol.Protocol;
import com.tunnel.common.util.HttpUtil;
import io.netty.channel.ChannelHandlerContext;

public class TransferProcessor implements Processor{
    @Override
    public void process(ChannelHandlerContext ctx, Protocol protocol) throws Exception {
        // 1.根据data的数据中的原始uri，定位到需要转发的主机和端口上
        // 获取到原始的url,在url里，隐藏着要转发的主机配置，所以需要解析出来
        String data = protocol.getBody();
        String uri = HttpUtil.getUri(data);
        // 通过标识符号进行查询转发的主机配置信息
        String clientName =uri.split("/")[1];
        String proxyName =uri.split("/")[2];
        // 寻找对应的配置信息进行转发
        ProxyClientConfig currentConfig = new ProxyClientConfig();
        for (ProxyClientConfig config :  ClientParsConfig.ClientConfig.getProxyConfigs()) {
            if (config.getName().equals(proxyName)) {
                // 找到对应的通道，进行数据传输
                currentConfig = config;
                break;
            }
        }
        String oldlUri =uri;
        String realUrl= uri.replace("/"+clientName,"").replace("/"+proxyName,"");
        // 因为在pc端请求的url多前缀，这里需要把前缀去掉，换成真实的请求url
        data = data.replace(oldlUri,realUrl);
        String localIp = currentConfig.getIp();
        String localPort = currentConfig.getPort();
        LocalForward.sendLocalRequest(localIp, Integer.parseInt(localPort), protocol.getCommonType(),protocol.getSequenceId(),data, ctx.channel());
    }
}
